home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BMUG Revelations
/
BMUG Revelations.toast
/
Programming
/
Programming Utilities
/
ViewIt Shareware
/
ViewIt™ 2.04 Shareware
/
Projects
/
C Demos
/
FaceProcLC.c
next >
Wrap
Text File
|
1992-06-24
|
3KB
|
90 lines
/* FaceWare 2.0 Initialization & Dispatching Procedures */
/* ©FaceWare 1989-92. All Rights Reserved. */
#include "FaceStorLC.h"
struct FaceRec fRec;
typedef struct HeadRec {
ProcPtr addr;
short baseID;
short versID;
short message;
short resID;
Ptr fPtr;
} HeadRec, *HeadPtr;
void PrepIt (long x, long b, long v, long r, long f)
{
short i;
((HeadPtr)x)->addr = (ProcPtr)*GetResource('FCMD',1000);
((HeadPtr)x)->baseID = b;
((HeadPtr)x)->versID = v;
((HeadPtr)x)->message = 0;
((HeadPtr)x)->resID = r;
((HeadPtr)x)->fPtr = (Ptr)f;
if (fRec.xEntries > 0)
for (i = 0; i <= fRec.xEntries - 1; i++)
if (((HeadPtr)x)->baseID == fRec.xTable[i * 4])
if (((HeadPtr)x)->versID == fRec.xTable[1 + i * 4])
if (fRec.xTable[3 + i * 4] != 0)
((HeadPtr)x)->addr = (ProcPtr)fRec.xTable[3 + i * 4];
}
pascal void fJumpIt(Ptr thePtr) = {0x2257,0x2051,0x4E90};
void FaceIt (void* thePtr, long m1, long m2, long m3, long m4, long m5)
{
short i;
if (m1 == DoInit) {
if (m4 > -1 && !BitTst(&m4, 31L)) {
FlushEvents(62, 0); /* ignore spurious mouse and key events */
InitGraf(&thePort); /* perform appropriate Mac initializations */
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs(0L);
}
CtoPstr(fRec.uName);
if (GetResource('FCMD', 1000) == 0) /* LoadIt available? */
if (OpenResFile((StringPtr)StripAddress((Ptr)fRec.uName)) < 0)
ExitToShell(); /* quit if not found */
fRec.fFlags = m2; /* store FaceIt bit flags */
fRec.xEntries = m5; /* store # of table entries */
thePtr = (Ptr)&fRec;
if (m3 > -1) { /* call LoadIt to expand heap? */
PrepIt((long)thePtr,m3,0L,0L,(long)thePtr);
fJumpIt(thePtr);}
PrepIt((long)thePtr,1100L,20L,0L,(long)thePtr); /* setup fRec header */
PrepIt((long)&fRec.dHead,1130L,10L,0L,(long)thePtr); /* setup dRec header */
PrepIt((long)&fRec.uHead,1110L,20L,0L,(long)thePtr); /* setup uRec header */
PrepIt((long)&fRec.vHead,1200L,20L,0L,(long)thePtr); /* setup vRec header */
fRec.fHead[5] = m4; /* store environment type */
fRec.uHead[5] = 1; /* store string type */
thePtr = 0L;
if (m4 < -3) return;
}
if (m1 == DoPrep)
PrepIt(m2, m3, m4, m5, (long)&fRec);
else if (m1 < 0 && m1 > -11) {
i = (4 * (-1 - m1));
fRec.xTable[i] = m2;
fRec.xTable[1 + i] = m3;
fRec.xTable[2 + i] = m4;
fRec.xTable[3 + i] = m5;}
else {
if (thePtr == 0L) /* default module? */
thePtr = (Ptr)&fRec.uHead;
else if (((HeadPtr)thePtr)->fPtr != (Ptr)&fRec) { /* control driver? */
fRec.cControl = (ControlHandle)thePtr;
thePtr = (Ptr)&fRec.vHead;}
((HeadPtr)thePtr)->message = 0;
fRec.uCommand = m1; /* pass Command & Params */
fRec.uParam[0] = m2;
fRec.uParam[1] = m3;
fRec.uParam[2] = m4;
fRec.uParam[3] = m5;
fJumpIt(thePtr); /* jump to FCMD module */
}
}